class RegistroDeObservadores:
    def __init__(self):
         self.__observadores = set()

    def suscribir(self, observador):
        self.__observadores.add(observador)

    def desuscribir(self, observador):
        self.__observadores.remove(observador)

    def notificar(self, evento, *parametros):
        noHacerNada = (lambda *a: None)
        for observador in self.__observadores:
            getattr(observador, evento, noHacerNada)(*parametros)


####TEST
##class TestReg:
##    def __init__(self,letra):
##        self.__letra = letra
##        
##    def test(self):
##        print "llamaron test a: '" + self.__letra +"'"
##
##    def test2(self,p):
##        print "llamaron test2 a: '" + self.__letra +"' con parametro '" + p + "'"
##            
##a = TestReg("a")
##b = TestReg("b")
##reg = RegistroDeObservadores()
##reg.suscribir(a)
##reg.suscribir(b)
##reg.notificar("test")
##reg.notificar("test2","parametro")
##reg.notificar("test3","parametro")
##reg.desuscribir(a)
##reg.desuscribir(b)
##reg.notificar("test")
